package com.expert.miniapp.service;

import com.expert.miniapp.dao.ChatMessage;
import com.expert.miniapp.dao.ChatSession;
import com.expert.miniapp.dto.ChatSessionDTO;

import java.util.List;
import java.util.Map;

/**
 * ChatSessionService - 会话服务接口
 *
 * @author System
 * @since 2025-10-21
 */
public interface ChatSessionService {

    /**
     * 创建新会话
     *
     * @param userId 用户ID
     * @return 新创建的会话对象
     */
    ChatSession createSession(String userId);

    /**
     * 获取用户的所有会话列表
     *
     * @param userId 用户ID
     * @return 会话DTO列表（按updated_at倒序）
     */
    List<ChatSessionDTO> getUserSessions(String userId);

    /**
     * 获取会话详情
     *
     * @param sessionId 会话ID
     * @return 会话详情DTO
     */
    ChatSessionDTO getSessionDetail(String sessionId);

    /**
     * 获取会话的所有消息
     *
     * @param sessionId 会话ID
     * @return 消息列表（按message_order正序）
     */
    List<ChatMessage> getSessionMessages(String sessionId);

    /**
     * 保存一轮对话（用户消息+AI回复）
     *
     * @param sessionId 会话ID
     * @param messages 消息列表
     * @return 保存结果信息
     */
    Map<String, Object> saveMessages(String sessionId, List<ChatMessage> messages);

    /**
     * 重命名会话
     *
     * @param sessionId 会话ID
     * @param title 新标题
     * @return 是否成功
     */
    boolean renameSession(String sessionId, String title);

    /**
     * 删除会话
     *
     * @param sessionId 会话ID
     * @return 是否成功
     */
    boolean deleteSession(String sessionId);

    /**
     * 全局搜索会话（根据消息内容）
     *
     * @param userId 用户ID
     * @param keyword 搜索关键词
     * @return 匹配的会话列表
     */
    List<ChatSessionDTO> searchSessions(String userId, String keyword);
}
